오늘 소개해 드릴 프로젝트는 Dejavu입니다. Acoustic Fingerprinting용 오픈 소스인데요. 이 Acoustic Fingerprinting은 Shazam 이라던지 Spotify처럼 음악을 듣고는 어떤 음악인지 알아내는 알고리즘을 가지고 있습니다.
2016/05/19 Editor’s choice
worldveil/dejavu
_dejavu - Audio fingerprinting and recognition in Python_github.com
Acoustic fingerprinting 이란?
Acoustic fingerprint - Wikipedia, the free encyclopedia
_Practical uses of acoustic fingerprinting include identifying songs, melodies, tunes, or advertisements; sound effect…_en.wikipedia.org
네, 위키가 영어라서 죄송합니다.
원래 이 쪽 분야에서 유명한 프로젝트는 echoprint 라는 오픈 소스입니다. 안드로이드용으로 어떻게 만들 것인지에 대한 알고리즘까지 NDK 용으로 만들어져 있습니다.
The Echo Nest
_GitHub is where people build software. More than 14 million people use GitHub to discover, fork, and contribute to over…_github.com
이렇게 유명한 오픈소스가 있지만 dejavu를 소개하는 것은 mysql 데이타베이스에 입력하고 쿼리를 통해 가져오는 방식이라 독특함이 있어서 입니다.
설치를 해 봅시다
worldveil/dejavu
_dejavu - Audio fingerprinting and recognition in Python_github.com
설치 가이드가 있어서 죽 살펴보고는 리눅스가 더 쉽겠네 라고 덤볐다가 yum, apt-get 최신 레파지토리에서는 제대로 찾아지지 않아서 (제 실력 부족일 수 있습니다.)
Mac으로 다시 복귀했습니다.
Python은 2.7 기준으로 작업을 했습니다.
brew install portaudio
brew install ffmpeg
sudo easy\_install pyaudio
sudo easy\_install pydub
sudo easy\_install numpy
sudo easy\_install scipy
sudo easy\_install matplotlib
sudo easy\_install pip
sudo pip install MySQL-python
sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
짧은 몇줄 밖에 안되지만 마지막 두줄은 그냥 되지 않습니다.
mysql을 기본적으로 깔아야 하고 (이미 깔려 있을 테지만요)
마지막 줄은 Mac OS X -El Capitan에서는
OS X 10.11 엘 캐피탄에 도입된 새로운 보안체계 ‘루트리스(Rootless)’를 끄고 켜는 방법
_업데이트 (2015/12): OS X 엘 캐피탄이 업데이트 되면서 csrutil status 명령어와 관련해 변경사항이 있었습니다. 이번 WWDC가 개최되기 전부터 새로운 보안 기능이 애플의 두 운영체제에 도입될…_macnews.tistory.com
여기를 참조하세요.
실행을 해 봅시다.
python2. 7을 기준으로 실행을 합니다.
\>\>\> from dejavu import Dejavu
\>\>\> config = {
... "database": {
... "host": "127.0.0.1",
... "user": "root",
... "passwd": <password above\>,
... "db": <name of the database you created above\>,
... }
... }
\>\>\> djv = Dejavu(config)
이 소스는 Mysql 에 접근을 하는 소스입니다.
설치를 하고
$python example.py
를 실행시켜 주면 dejavu 데이타베이스 및에 fingerprints 와 songs 테이블이 생깁니다.
+-----------------+
|Tables\_in\_dejavu |
+-----------------+
|fingerprints |
|songs |
+-----------------+
안에는 아래와 같이 데이타들이 들어 있습니다.
대강 Database 에 어떻게 저장하고 비교를 하는지 알것 같습니다.
더 자세한 설명은 아래의 링크를 참조하시면 될 것 같습니다.
Audio Fingerprinting with Python and Numpy
_The first day I tried out Shazam, I was blown away. Next to GPS and surviving the fall down a flight of stairs, being…_willdrevo.com
그러면 앱을 어떻게 만들면 좋을까요?
파일 Recognizer를 한번 실행해 보았습니다.
\>\>\> from dejavu.recognize import FileRecognizer
\>\>\> song = djv.recognize(FileRecognizer, "./wav/18000.wav")
\>\>\> print song
{'song\_id': 6, 'song\_name': '18000', 'file\_sha1': 'AF3C75663CC86AD857E05E79EE8A028678D85359', 'confidence': 19, 'offset\_seconds': 0.0, 'match\_time': 1.4198949337005615, 'offset': 0}
아래와 같이 잘 인식 합니다.
wav파일들을 잘만 만들어서 스피커를 통해 아웃풋을 통해 들어오는 음악을 잘 만진다면 spotify 같은 앱도 만들 수 있겠군요. ( 오 이 근자감)
바로 되는 건 없어요?
있습니다. 눈썰미가 있으신 분은 Recognizer를 보고 예감하셨을 텐데요. MicrophoneRecognizer 라는 녀석이 있어서 실행을 시켜 보았습니다.
\>\>\> from dejavu.recognize import MicrophoneRecognizer
\>\>\> song = djv.recognize(MicrophoneRecognizer, seconds=10)
이상하게 잘 작동하지 못하는 걸 보니 화이트 노이즈가 많아서 그런 듯 합니다.
이 노이즈들을 제거하는 내용은 다음번에 알아보겠습니다.
By Keen Dev on May 19, 2016.
Exported from Medium on May 31, 2017.